function mcModule(_export)
{
  
  var concreteVisited = {};
  concreteVisited.visited = function (node, stack, benva, store, time) { return {store:store, stack:stack} };
  
  function run(src, expected)
  {
    var ast = createAst(src);
    var lat = new CpLattice();
    var jipda = new Jipda({lattice: lat, k:0, ag: concreteAg, visited: concreteVisited});
    var start = Date.now();
    var result = jipda.evalNode(ast);
    var end = Date.now();
    var actual = result.map(State.topOfStack).reduce(Lattice.join, BOT);
    assertEquals(jipda.lattice.abst1(expected), actual);    
  }
  
  function nssetup()
  {
    var src = read("benchmark/resources/mc/nssetup.js");
    run(src, 38156);    
  }

  function myNavierStokes()
  {
    var src = read("benchmark/resources/mc/myNavierStokes.js");
    run(src, 135);    
  }

  function my3dcube()
  {
    var src = read("benchmark/resources/mc/my3dcube.js");
    run(src, -1);    
  }

  function myChurchNums()
  {
    var src = read("benchmark/resources/mc/myChurchNums.js");
    run(src, true);    
  }

  if (!_export)
  {
    _export = {};
  }
  
  _export.nssetup = nssetup;
  _export.myNavierStokes = myNavierStokes;
  _export.my3dcube = my3dcube;
  _export.myChurchNums = myChurchNums;
  return _export;
}

var mc = mcModule(); 